웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > php

[PHP] mail() 함수, 이메일 발송 함수 알아보기

Last Modified : 2018-01-01 / Created : 2016-05-31
25,976
View Count

웹사이트 운영하는 목적은 다양할 수 있습니다. 이때 방문자가 정보를 교환하거나 전달하는 과정은 매우 중요한 요소 중 하나입니다. 저와 같이 블로그 웹사이트의 경우 여러가지 방법이 있을 수 있는데 예를들어 포스팅에 코멘트를 서로 남긴다거나 트랙백 등이 이런 교류 중 하나일 것입니다. 이 중에서 방문자에게 이메일을 보내는 것 역시 매우 중요한 요소라 할 수 있습니다. 특히 구독을 요청하는 등 다양한 방법으로 사용할 수 있죠.




# 방문자에게 이메일을 보내느 방법

아래는 방문자에게 이메일을 보내는 방법에 대하여 자세하게 알아보려합니다. 이메일을 통해 방문자가 운영 웹사이트에 좀 더 쉽게 접근하고 편리하게 정보를 얻을 수 있는 역할을 수행할 수 있을 것입니다.


! 방문자에게 이메일 발송하기

그렇다면 방문자에게 이메일을 발송하는 경우가 언제있을 수 있을까요? 블로그등의 웹사이트 운영시 방문자가 구독신청을 했을 경우... 아니면 코멘트를 남기고 이메일을 함께 남기는 경우 관련 코멘트가 등록되었을때 이에 대한 요약을 보내는 것 역시 가능할 것입니다.

그렇다면 방문자에게 우리가 원하는 내용의 이메일을 보내는 방법은 어떻게 해야할까요? PHP 언어에서도 이메일 발송을 위한 함수가 존재합니다. 방문자 또는 타인에게 이메일을 보내기 위한 방법으로 mail() 함수를 사용할 수 있습니다.
 
mail(수신자, 제목, 내용, 옵션)

 마지막의 옵션은 선택사항으로 참조 및 숨은 참조인등을 설정할 수도 있으며 선택사항으로 없더라도 메일 발송은 가능합니다. 만약 아래의 내용을 이메일로 송신한다고 한다면 간단하게 예를 들어보겠습니다.


1. 수신자 : webisfree@webisfree.com, manager@webisfree.com
2. 제목 : How to send a email to subscribers? 
3. 내용 : Take a look at this example. Deathly simple it is!
4. 옵션 :
  i. 보내는 사람: from@webisfree.com
  ii. 참조인: cc@webisfree.com
  iii. 숨은참조: bcc@websifree.com

위 내용을 토대로 폼 태그를 사용하여 아래와 같이 예제를 만들어 보고자 합니다.


! 수신인 설정하기

먼저 받는 사람이 한명이 아닌 여러명인 경우 콤마(,)를 사용해서 추가할 수 있습니다. 받는 사람이 두명이기 때문에 아래처럼 변수 $who를 설정합니다.
$who = 'webisfree@webisfree.com, manager@webisfree.com';


! 제목 및 내용 설정하기

제목 및 내용은 원하는 내용을 삽입하면 되죠.
$title = 'How to send a email to subscribers?';
$content = 'Take a look at this example. Deathly simple it is!';


! 옵션사항 설정하기

그럼 네번째 인자... 옵션사항에 대하여 알아볼까요?
아래는, 보내는사람 설정방법입니다.
$optionValue = 'From: who <from@webisfree.com> \r\n';

! 참조인 설정하기

다음은 참조인 설정입니다. Cc라고들 하죠.
$optionValue .= 'Cc: cctester <cc@webisfree.com> \r\n';

! 숨은참조 설정하기

마지막으로 숨은참조 설정방법입니다. 숨은참조는 자신이 보낸 메일이 잘 보내졌는지 스스로 확인하기 위해 자기 이메일을 넣는 경우에 사용합니다. 또는 수신인이 다른 누구에게 해당 메일이 보내졌는지 모르게 할 경우에도 사용할 수 있죠.
$optionValue .= 'Bcc: bcctester <bcc@webisfree.com> \r\n';

! 헤더정보의 설정하기

하나가 더 있군요... 바로 헤더 설정에 대한 부분입니다.
$header.= "MIME-Version: 1.0";
$header.= "Content-Type: text/html; charset=utf-8";
$header.= "X-Mailer: PHP";

위에서 보이는 period 구두점 표시는 기존의 변수에 계속해서 내용을 추가되도록 합니다. 위 내용으로 이제 모든게 준비되었군요... 그럼 아래부터는 메일을 발송해보도록 하겠습니다.
<?php
  mail( $who, $title, $content, $optionValue);
?>

여기까지 메일발송에 대하여 알아봤습니다. 메일 발송은 서버에서 발송하기 때문에 발송자가 많아질 경우 당연히 서버 부하가 가중될 수 있는 점을 알아야합니다. 만약 상시적으로 대량의 메일 발송이 필요한 경우 별도의 메일 서버를 구축하는 것 역시 방법입니다. 실제로 많은 곳에서 별도 이메일 서버를 구축하거나 이메일 발송 서비스를 이용하고 있습니다. 물론 비용이 발생할 수 있습니다.



# 마치면서

만약 이메일 발송시 문제가 생기는 경우? 아래 사항을 확인해보세요!

1. 테스트 메일 수신에 정상적으로 오지 않은 경우 header 설정에 문제가 있는 경우가 많죠. 예를들어 폰트가 깨지는 문제도 이에 포함됩니다.

2. html 코드가 그대로 보인다던지 문제가 발생하면 quote(따옴표)가 하나가 아닌지 확인해보세요. 쌍따옴표로 변경할 경우 정상적으로 출력될 수 있습니다.

여기까지 메일을 발송하는 방법에 대하여 알아보았습니다.

Previous

[PHP] 문자열 태그 주석 제거 함수, strip_tags()

Previous

[PHP] 서버에 특정 파일이 있는지 확인, file_exists(), is_file(), file()